原程式碼:
function formatLocalDateTime(originalStr) {
var result = "";
if (!originalStr) {
return result;
}
var d = new Date(Date.parse(originalStr.split(" ")[0]));
var year = d.getFullYear();
var month = ((d.getMonth() + 1) < 10) ? '0' + (d.getMonth() + 1).toString() : (d.getMonth() + 1).toString();
var date = ((d.getDate()) < 10) ? '0' + (d.getDate()).toString() : (d.getDate()).toString();
result = [year, month, date].join("-");
if (result == '1900-01-01') {
result = '';
}
return result;
}
有無優於 Date.parse() 解析日期的方法?
不同瀏覽器,使用 Date.parse() 可能會有不同的解析結果,將導致解析錯誤或無效日期。
//chrome
console.log(new Date("09/30/2024")); // Mon Sep 30 2024
//safari
console.log(new Date("09/30/2024")); // Invalid Date
建議使用更可靠的方法來解析日期字串,例如利用專門的日期函式庫(如 moment.js 或 Date 的標準方法)。
//改進方法:使用 Date()
let d = new Date(originalStr.split(" ")[0]);
if (isNaN(d.getTime())) return ""; // 檢查日期是否有效
//使用 Date()舉例說明
let d1 = new Date("2024-09-30");
let d2 = new Date("invalid-date");
console.log(d1.getTime()); // 有效日期:return 時間戳:1738252800000
console.log(d2.getTime()); // 無效日期:return NaN
對空字串檢查可以簡化
if (!originalStr) 已經涵蓋了 null、undefined 和空字串的情況,但這段檢查邏輯過於廣泛。若僅需針對空字串,應改成 if (originalStr === "") 來進行更精確的檢查。
使用 padStart() 簡化補零邏輯
//原始的邏輯:手動檢查月份和日期是否小於 10,然後在前面補上 '0'。
let month = ((d.getMonth() + 1) < 10) ? '0' + (d.getMonth() + 1).toString() : (d.getMonth() + 1).toString();
let date = (d.getDate() < 10) ? '0' + d.getDate().toString() : d.getDate().toString();
//改進 code ,簡化邏輯:padStart(2, '0') 表示若字串長度小於 2,則在開頭補上 '0'。
let month = (d.getMonth() + 1).toString().padStart(2, '0');
let date = d.getDate().toString().padStart(2, '0');
//使用 padStart()舉例說明
console.log((5).toString().padStart(2, '0')); // '05'
console.log((12).toString().padStart(2, '0')); // '12'
function formatLocalDateTime(originalStr) {
if (!originalStr) return "";
let dateStr = originalStr.split(" ")[0];
let d = new Date(dateStr);
if (isNaN(d.getTime())) return ""; // 無效日期
let year = d.getFullYear();
let month = (d.getMonth() + 1).toString().padStart(2, '0');
let date = d.getDate().toString().padStart(2, '0');
let formattedDate = `${year}-${month}-${date}`;
return formattedDate === "1900-01-01" ? "" : formattedDate;
}
應該再補個後端的例子的,但由於時間的關係,今天就先一個範例給大家參考。相信後天的颱風假可以讓我好好補充一下要出門上班的大家,小心安全!